package com.cjf.aop.annotation;

import com.cjf.aop.enums.CacheType;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 缓存代理注解，通过aop切片的方式在编译期间织入源代码中
 * <p>功能：缓存某方法的返回值，下次执行该方法时，直接从缓存里获取。</p>
 * created by cjf
 * on: 2020/3/19
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface CacheProxy {
    /**
     * @return 缓存的key
     */
    String value() default "";

    /**
     * @return 缓存时间[单位：s]，默认是永久有效
     */
    long cacheTime() default -1;

    /**
     * @return 缓存类型数组,默认内存缓存
     */
    @CacheType int[] type() default CacheType.MEMORY;
}
